/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.upn.sigemfi.vnf.beans;


import edu.upn.sigemfi.plt.be.OrdenPago;
import edu.upn.sigemfi.vnf.bc.OrdenPagoDelegate;
import edu.upn.sigemfi.vnf.bc.TransaccionNoFinancieraDelegate;
import edu.upn.sigemfi.vnf.bc.WebinstDelegate;
import edu.upn.sigemfi.vnf.bc.WebserDelegate;
import edu.upn.sigemfi.vnf.be.Giro;
import edu.upn.sigemfi.vnf.be.OrdenPagoT;
import edu.upn.sigemfi.vnf.be.ServicioGeneral;
import edu.upn.sigemfi.vnf.be.ServicioInstitucional;
import edu.upn.sigemfi.vnf.be.WebserInstituciones;
import edu.upn.sigemfi.vnf.be.WebserServicios;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;



/**
 *
 * @author Programador
 */
public class TransaccionNoFinancieraController {
    private TransaccionNoFinancieraDelegate delegado;
    private WebserDelegate delegadoServ;
    private WebinstDelegate delegadoInst;
    private OrdenPagoDelegate delegadoOrp;
    private Giro giro;
    private OrdenPagoT ordenpago;
    private ServicioGeneral servicioGeneral;
    private WebserServicios servGeneral;
    private ServicioInstitucional servicioInstitucional;
    private WebserInstituciones servInstitucional;
    private OrdenPago nroOrden;

    public TransaccionNoFinancieraController(){
        delegado = new TransaccionNoFinancieraDelegate();
        delegadoServ = new WebserDelegate();
        servGeneral = new WebserServicios();
        delegadoInst = new WebinstDelegate();
        servInstitucional = new WebserInstituciones();
    }

    public Giro getGiro() {
        return giro;
    }

    public void setGiro(Giro giro) {
        this.giro = giro;
    }

    public OrdenPagoT getOrdenpago() {
        return ordenpago;
    }

    public void setOrdenpago(OrdenPagoT ordenpago) {
        this.ordenpago = ordenpago;
    }

    public ServicioGeneral getServicioGeneral() {
        return servicioGeneral;
    }

    public void setServicioGeneral(ServicioGeneral servicioGeneral) {
        this.servicioGeneral = servicioGeneral;
    }

       public WebserServicios getServGeneral() {
        return servGeneral;
    }

    public void setServGeneral(WebserServicios servGeneral) {
        this.servGeneral = servGeneral;
    }

    public OrdenPago getNroOrden() {
        return nroOrden;
    }

    public void setNroOrden(OrdenPago nroOrden) {
        this.nroOrden = nroOrden;
    }

    public WebserInstituciones getServInstitucional() {
        return servInstitucional;
    }

    public void setServInstitucional(WebserInstituciones servInstitucional) {
        this.servInstitucional = servInstitucional;
    }

    public ServicioInstitucional getServicioInstitucional() {
        return servicioInstitucional;
    }

    public void setServicioInstitucional(ServicioInstitucional servicioInstitucional) {
        this.servicioInstitucional = servicioInstitucional;
    }


    public String mostrar()
    {
        return "mostrar";
    }
    public String cancelar() {
        giro = null;
        return "volver";
    }


    //Giros
    public List<Giro> getGiros() throws Exception{
        try {
            return delegado.listarGiros();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String nuevoGiro(){
        giro = new Giro();
        return "nuevo";
    }

    public String registrarGiro(){
        try {
            delegado.crearGiro(giro);
            //delegado.crearTransaccionNFGiro(giro);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }
     public String extornarGiro(){
         try {
            giro.setTipoMovimiento("Extornado");
            delegado.extornarGiro(giro);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }
      public String editarGiro(){
         try {
            delegado.editarGiro(giro);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

    //OrdenPago
    public List<OrdenPagoT> getOrdenPagos() throws Exception{
        try {
            return delegado.listarOrdenPagos();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String nuevoOrdenPago(){
        ordenpago = new OrdenPagoT();
           return "nuevo";
    }

    public String registrarOrdenPago(){
        try {
            delegado.crearOrdenPago(ordenpago);
            //delegado.crearTransaccionNFGiro(giro);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }
     public String extornarOrdenPago(){
         try {
            ordenpago.setTipoMovimiento("Extornado");
            delegado.extornarOrdenPago(ordenpago);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }
      public String editarOrdenPago(){
         try {
            delegado.editarOrdenPago(ordenpago);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

      public String buscarNroOrdenPago() {
        try {
            OrdenPago op = delegadoOrp.buscarPorId(nroOrden.getIdOrdenPago());
            if (op != null) {
                nroOrden = op;
            } else {
                mostrarMensaje("Error", "No se encontro orden de pago", FacesMessage.SEVERITY_INFO);
            }
        } catch (Exception ex) {
            Logger.getLogger(TransaccionNoFinancieraController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarMensaje("Error", "Buscar orden pago", FacesMessage.SEVERITY_ERROR);
        }

        return "";
    }


    //Servicio General
    public List<ServicioGeneral> getServiciosGenerales() throws Exception{
        try {
            return delegado.listarServiciosGenerales();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String nuevoServicioGeneral(){
        servicioGeneral = new ServicioGeneral();
        servGeneral = new WebserServicios();
        return "nuevo";
    }

    public String registrarServicioGeneral(){
        try {
            servicioGeneral.setNombreCliente(servGeneral.getNombreCliente());
            //servicioGeneral.setCodCliente(servGeneral.getIdCliente());
            servicioGeneral.setMontoTransaccion(servGeneral.getPagoMonto());
            servGeneral.setEstado("PAGADO");
            delegado.crearServicioGeneral(servicioGeneral);
            delegadoServ.editarWebServ(servGeneral);
            //delegado.crearTransaccionNFGiro(giro);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }
     public String extornarServicioGeneral(){
         try {
            servicioGeneral.setTipoMovimiento("Extornado");
            delegado.extornarServicioGeneral(servicioGeneral);
            servGeneral.setEstado("ACTIVO");
            delegadoServ.editarWebServ(servGeneral);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }
      public String editarServicioGeneral(){
         try {
            servicioGeneral.setNombreCliente(servGeneral.getNombreCliente());
            servicioGeneral.setMontoTransaccion(servGeneral.getPagoMonto());
            servicioGeneral.setCodCliente(servGeneral.getIdCliente());
            servGeneral.setEstado("PAGADO");
            delegado.editarServicioGeneral(servicioGeneral);
            delegadoServ.editarWebServ(servGeneral);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

   public String buscarCuenta() {
        try {
            WebserServicios web = delegadoServ.buscarPersonaPorRuc(servGeneral.getRucServicio());
            if (web != null) {
                servGeneral = web;
            } else {
                mostrarMensaje("Error", "No se encontro cliente con el ruc especificado", FacesMessage.SEVERITY_INFO);
            }
        } catch (Exception ex) {
            Logger.getLogger(TransaccionNoFinancieraController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarMensaje("Error", "Buscar Cliente", FacesMessage.SEVERITY_ERROR);
        }

        return "";
    }
    public String buscarCliente() {
        
        try {
            WebserServicios cli = delegadoServ.buscarClientePorId(servGeneral.getIdCliente());
            if (cli != null) {
                
                 if(cli.getEstado().compareTo("ACTIVO") != 0){
                    mostrarMensaje("Este recibo no puede ser pagado porque ya fue pagado, o esta vencido", "No se encontro cliente con el id especificado", FacesMessage.SEVERITY_ERROR);
                }else{servGeneral = cli;}
            } else {
                mostrarMensaje("Este recibo no puede ser pagado porque ya fue pagado, o esta vencido", "No se encontro cliente con el id especificado", FacesMessage.SEVERITY_ERROR);
            }
        } catch (Exception ex) {
            Logger.getLogger(TransaccionNoFinancieraController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarMensaje("Este recibo no puede ser pagado porque ya fue pagado, o esta vencido", "Buscar Id Cliente", FacesMessage.SEVERITY_ERROR);
        }

        return "";
    }

    //Servicio Institucional
    public List<ServicioInstitucional> getServicioInstitucionales() throws Exception{
        try {
            return delegado.listarServicioInstitucionales();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String nuevoServicioInstitucional(){
        servicioInstitucional = new ServicioInstitucional();
        servInstitucional = new WebserInstituciones();
        return "nuevo";
    }

    public String registrarServicioInstitucional(){
        try {
            servicioInstitucional.setNombreAlumno(servInstitucional.getNombreAlumno());
            servicioInstitucional.setCodAlumno(servInstitucional.getCodAlumno());
            servicioInstitucional.setMontoTransaccion(servInstitucional.getPagoMonto());
            servicioInstitucional.setNombreInstitucion(servInstitucional.getNombreInstitucion());
            servInstitucional.setEstado("PAGADO");
            delegado.crearServicioInstitucional(servicioInstitucional);
            delegadoInst.crearWebInst(servInstitucional);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

      public String extornarServicioInstitucional(){
         try {
            servicioInstitucional.setTipoMovimiento("Extornado");
            servInstitucional.setEstado("ACTIVO");
            delegado.extornarServicioInstitucional(servicioInstitucional);
            delegadoInst.editarWebInst(servInstitucional);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }
      public String editarServicioInstitucional(){
         try {
            servicioInstitucional.setNombreAlumno(servInstitucional.getNombreAlumno());
            servicioInstitucional.setCodAlumno(servInstitucional.getCodAlumno());
            servicioInstitucional.setMontoTransaccion(servInstitucional.getPagoMonto());
            servicioInstitucional.setNombreInstitucion(servInstitucional.getNombreInstitucion());
            servInstitucional.setEstado("PAGADO");
            delegado.editarServicioInstitucional(servicioInstitucional);
            delegadoInst.crearWebInst(servInstitucional);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

    public String buscarAlumno() {

        try {
            WebserInstituciones alu = delegadoInst.buscarPersonaPorCodAlumno(servInstitucional.getCodAlumno());
            if (alu != null) {
                
                 if(alu.getEstado().compareTo("ACTIVO") != 0){
                    mostrarMensaje("Este recibo ya fue pagado o no se puede pagar por este medio", "No se encontro cliente con el id especificado", FacesMessage.SEVERITY_ERROR);
                }else{servInstitucional = alu;}
            } else {
                mostrarMensaje("Este recibo no puede ser pagado ", "No se encontro cliente con el id especificado", FacesMessage.SEVERITY_ERROR);
            }
        } catch (Exception ex) {
            Logger.getLogger(TransaccionNoFinancieraController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarMensaje("Este recibo no puede ser pagado ", "Buscar Cod Alumno", FacesMessage.SEVERITY_ERROR);
        }

        return "";
    }
    
    //Metodo para mostrar mensajes en la pagina
    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }
}
